package cn.kgc.service;

import io.seata.rm.tcc.api.BusinessActionContext;
import io.seata.rm.tcc.api.BusinessActionContextParameter;
import io.seata.rm.tcc.api.LocalTCC;
import io.seata.rm.tcc.api.TwoPhaseBusinessAction;

/**
 * @author YC
 * TCC业务一定要放在单独的类中
 */
@LocalTCC
public interface ResumeTccService {

    /**
     * try方法-初始化简历
     *
     * @param actionContext 上下文
     * @param userId        用户id
     * @return true/false
     * 注解@TwoPhaseBusinessAction()用于指定try、confirm、cancel方法
     */
    @TwoPhaseBusinessAction(
            // try名字要全局唯一
            name = "tryInitResume",
            // 如果全局事务的所有分支事务try操作成功，执行commitMethod指定的方法
            commitMethod = "commitInitResume",
            // 如果全局事务的至少一个分支事务try操作失败，执行rollbackMethod指定的方法
            rollbackMethod = "cancelInitResume"
    )
    boolean tryInitResume(
            // 如果方法中需要使用BusinessActionContext，使用@BusinessActionContext注解可以拿到
            BusinessActionContext actionContext,
            @BusinessActionContextParameter(paramName = "userId") String userId
    );

    /**
     * commit方法-初始化简历
     *
     * @param actionContext 上下文
     * @return true/false
     * 如果全局事务的所有分支事务try操作成功，执行全局事务下所有分支事务的commit操作
     */
    boolean commitInitResume(BusinessActionContext actionContext);

    /**
     * cancel方法-初始化简历
     *
     * @param actionContext 上下文
     * @return true/false
     * 如果全局事务的至少一个分支事务try操作失败，执行全局事务下所有分支事务的cancel操作
     */
    boolean cancelInitResume(BusinessActionContext actionContext);

}
